Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Здравствуйте!

Пишу дипломку на cache 2005 "Web-site образовательного учреждения"!

У меня есть проверка на сайте на логин и пароль. Она только проверяет и все. У меня вопрос по доступу.

Может кто-нибудь подсказать как сделать так, чтобы зарегистрированные пользователи могли заходить на определенные страницы, а незарегистрированные пользователи нет? Использовать Coocie или можно использовать глобалы? И как сделать так чтобы при загрузке страницы она проверяла зареген пользователь или нет? Я новичок в каше поэтому может что-то неправильно описал.

Заранее ответившим спасибо!
8 май 07, 13:02    [4113602]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13043
Роль Каше в этом вопросе на втором плане :)
Ты это умееш делать не в Каше?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
8 май 07, 13:45    [4114149]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Нет, я и в каше и в web-технологиях новичок!
8 май 07, 13:49    [4114185]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13043
Дело осложняется... :(
Вот один из примеров редиректа
<html>
<title>Передод на страницу...</title>
<head>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=WINDOWS-1251">
<script language='javascript'>
function Go() {
   top.location="menu.csp"
}
</script>
</head>
<body onload='Go()'>
<p>Переход на другую страницу...</p>
<p>Если переход на другую страницу не происходит автоматически то нажмите
<a href='menu.csp'>сюда</a>.
</p>
</body>
</html>
Только тут он делается без анализа и после загрузки страницы... А тебе нужно другое событие, не onload... Выполняемое в самом начале, просто я сейчас не помню к чему там лучше привязаться...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
8 май 07, 14:01    [4114312]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
А как нибудь так нельзя типа:кодом каше

<script language='Cache'>
if (^ok=1) then
...
else
....
</script>

^ok -- глобальная переменная
8 май 07, 14:19    [4114447]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13043
Думаю что тут желательно разграничить "обязанности"...
Каше пусть занимается данными... А управлением страниц пусть займется что-то вебовское...

Для начала тебе нужно решить какие данные будут использоваться в задачке... Как их хранить... После этого можно двигаться дальше.
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
8 май 07, 14:28    [4114512]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13043
Напиши на ksa@npcair.ru пришлю тебе для ознакомления курс молодого кашевара Почитай...
Просто тут не крепится... Файл большеват :(
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
8 май 07, 14:33    [4114545]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3747
Делать наверно нужно примерно так

1. Берем параметры логин-пароль.
2. Проверяем их, если проверка прошла, записываем их внутри базы (типа такой-то зашел под такой сессией)
3. В каждой странице в методе OnPreHTTP проверяем залогинился ли под этой сессией какой-нибудь пользователь, и можно ли ему открывать эту страницу.
Если OnPreHTTP возращает 1, то загрузка тела страницы продолжается, если 0, то обрывается
8 май 07, 14:38    [4114576]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Ну у меня на сайте будет 5 ролей

это

пользователь
студент
преподаватель
декан
администратор

пользователь - не может делать ниче только просмотреть сайт
студент - может просмотрть базу "оценки" добавлять комментарии к лекциям
преподаватель - может смореть базу "оценки" и список студентов а также добавлять лекции
декан - может смотреть список преподавателей, список студентов, базу "оценки"
администратор - может смотреть редактировать все.

так нормально будет? Может Вы посоветуйте как-нить получше!
8 май 07, 14:42    [4114603]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Блок А.Н.

2. Проверяем их, если проверка прошла, записываем их внутри базы (типа такой-то зашел под такой сессией)


А сессии всегда же разные, или нет?

Если я зашел в 1 раз сессия допустим 2885876
если зашел в 2 раз то сессия 45135443

или я не прав?
8 май 07, 14:47    [4114647]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3747
В течении одного сеанса сессия одна, но между сеансами уникальная
Поэтому нужно хранить связку сессия/пользователь, а связку эту делать в момент логина.
8 май 07, 15:08    [4114773]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Блок А.Н. А вы не могди бы на небольшом примере показать? Как примерно это выглядит!
8 май 07, 15:11    [4114784]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
aleshap
Member

Откуда: Москва
Сообщений: 24
Я думаю не стоит усложнять задачу, необходимо простейший пример для дипломной работы, крутых наворотив с супер безопасности тут не нужно.

Просто в OnPreHTTP метода страницы размещаешь примерно следующий код

ClassMethod OnPreHTTP() As %Boolean [ Final, ServerOnly = 1 ]
{
 	if %session.Get("status")="" d %session.Set("status","пользователь")  //минимальный достоп	
	if (%request.Get("app")="login") {
		//сюда поподаем после submit на форме регистрации
		s login = %request.Get("Login")
		s password = %request.Get("Password")
		// проверка данных авторицазии
		if OK { 
			d %session.Set("status","роль пользователя") 
			d %session.Set("userID",ID) // ID - пользователя
		} else {
			d %session.Set("status","пользователь")	
		}
	}
	q $$$OK
}

Далее в коде можно проверять %session.Get("status") и в зависимости от роли, давать или не давать пускать или не пускать.
8 май 07, 15:46    [4115127]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Спасибо всем ответившим! Постараюсь разобраться, если не получится в этот же топик обращусь!
8 май 07, 15:58    [4115256]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3747
Попробую, только придется много выкидывать из текста, и кое-что добалять, так что не факт, что будет работать без отладки. Я постараюсь покороче
Страница входа:
<HTML>
<HEAD>
</server>
<script language=javascript>
 function login()
 {#call(..login(loginForm.user.value,loginForm.password.value))#;
 }
</script>
</HEAD>
<BODY>
<div style="height:33%"></div>
<center>
<form name=loginForm>
<table>
 <tr> <td>Имя <td><input type=text name=user onkeypress="if(event.keyCode==13)password.focus()" >
 <tr> <td>Пароль<td><input type=password name=password onkeypress="if(event.keyCode==13)login()">
 <tr> <td colspan=2><center><button onclick=login()>Вход</button>
</table>
</form>
</BODY>
</HTML>
<script language=cache method=login arguments="user:%String,password:%String">
 s flag=##class(Auth.SysUser).Login(user,password,%session.SessionId)
 w:flag "location.href='main.csp';"
 w:'flag "alert('Вход не произведен');"
 q
</script>

Класс
Пользователя
Class Auth.SysUser Extends %Persistent
{

Parameter EXTENTSIZE = 2;

Property Session As %String(TRUNCATE = 1);

Property Enabled As %Boolean [ InitialExpression = 1 ];

Property Login As %String(TRUNCATE = 1) [ InitialExpression = 1, Required ];

Property Hash As %String(TRUNCATE = 1) [ Private ];

Property Password As %String(TRUNCATE = 1) [ Transient ];

Index LoginIndex On Login [ Unique ];

Index SessionIndex On Session;

Method PasswordSet(pass As %String) As %Status
{
 q:pass=""
 s ..Hash=$system.Encryption.MD5Encode(pass)
}

ClassMethod SetPassword(login As %String, pass As %String)
{
	s hash=$system.Encryption.MD5Encode(pass)
 	&sql(update Auth.SysUser set hash=:hash where login=:login )
}

ClassMethod CheckPassword(login As %String, pass As %String) As %Boolean
{
	s hash=$system.Encryption.MD5Encode(pass)
 	&sql(select login from Auth.SysUser where login=:login and hash=:hash and enabled=1)
 	q:SQLCODE=0 1
 	q 0
}

ClassMethod Login(login As %String, pass As %String, session As %String) As %Boolean
{
 if ..CheckPassword(login,pass)
	{&sql(update Auth.SysUser set session='' where session=:session) 
	 &sql(update Auth.SysUser set session=:session where login=:login)
	 q 1
	}
 q 0
}

ClassMethod Create(login)
{
 &sql(insert into Auth.SysUser(login) values(login))
}
///возвращает текущего пользователя
ClassMethod CurrentUser(session) as %String
{
 &sql(select login into :login from Auth.SysUser where session=:session)
 q:SQLCODE=0 login
 q ""
}
}


И примерно так main.csp или другая csp-шка
<script language=cache method=OnPreHTTP arguments= "" returntype=%Boolean>
 s login=##class(Auth.SysUser).CurrentUser(%session.SessionId)
 if (/*если пользователю нельзя заходить на эту страницу или логин не был произведен */)
  { //Какие-то действия
    q 0
  }
 q 1
</script>

<html>
 ......
</html>


Да, так как каше - все-таки объектная система, то например метод OnPreHTTP можно определить в классе и наследовать от него CSP-шки тегом
<CSP:CLASS SUPER="какой-то класс">

Примерно так, я думаю.
В этом примере один пользователь может зайти только с одной машины. Если он зайдет с другой сессией, то предыдущая сотрется.
8 май 07, 16:09    [4115356]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Ptn
Guest
Вот так и выкладывают "исходники"
8 май 07, 16:54    [4115647]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3747
автор
Вот так и выкладывают "исходники"

А вы про что?
8 май 07, 17:31    [4115897]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13043
А я что-то не очень доверяю сессиям... :( Т.к. они "исчезают" через некоторый таймаут...
В основном используем %request
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
10 май 07, 08:19    [4118684]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
ОГРОМНОЕ СПАСИБО всем кто ответил! Постараюсь разобраться!
10 май 07, 10:16    [4119021]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3747
А я что-то не очень доверяю сессиям... :( Т.к. они "исчезают" через некоторый таймаут...

Запросы можно гонять в отдельном окне или фрейме.
10 май 07, 11:50    [4119723]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13043
Дело не в запросах... А в самой природе сессий...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
10 май 07, 13:28    [4120460]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3747
Ну правильно, такая у них природа, мрут без работы.
Заставляйте их работать ;-)
10 май 07, 13:48    [4120623]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13043
Блок А.Н.
Заставляйте их работать ;-)

Так мы сосвоим ПО не работаем
10 май 07, 15:58    [4121702]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Ptn
Guest
А как еще с ПО нужно работать.

Если ПО работает (включено) - сесиия живет. Не работает (выключено) - сессия дохнет.

Да здраствует сессии неработающего ПО ?
10 май 07, 17:47    [4122474]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13043
Наши пользователи очень любят зайти в приложение и ничего в нем не делать... Таймаут кончается... Сессия помирает... :(
Потом они загораются желанием поработать но уже поздно. :)
Вот отсюда ноги и растут...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
11 май 07, 08:07    [4123754]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить