powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Научите как пользоваться resource...
25 сообщений из 68, страница 1 из 3
Научите как пользоваться resource...
    #36469119
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ZEN-квикстарте есть упонинание про вот такой вид безопастности...

автор
Код: plaintext
<button id="myButton" caption="Press Me" resource="ADMIN" />
Это означает, что если пользователь обладает привилегиями на ресурс «ADMIN», то кнопка «myButton» будет отображаться для этого пользователя на странице.

Но далее про это ничего не найду... Как создать этот "ресурс"? Как потом осуществить привязку пользователя страницы к этому ресурсу?
Очень хотелось бы научиться этим пользоваться...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469297
YuraM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, krvsa!

Приведу фрагменты кода где использую и создаю ресурсы.

Клиент.
<hmenu id="MainMenu"
onshowHelp="zenPage.showHelp(help);"
help="Top">
<menu caption="Система" id="menuSystem" resource="User_SYS" layout="vertical">
<menuItem id="mnuRegUser"
caption="Реєстрація користувачів"
link="WEBFORM.frmRegUsers.cls"
image="images/regusers.png"
title="Реєстрація користувачів для роботи в системі"
resource="Admin_Total"
/>
<menuItem id="mnuPeople"
caption="Фізичні особи"
link="WEBFORM.frmPeople.cls"
image="images/users.png"
title="Довідник фізичних осіб"
resource="Individual"
/>
...

Программа, используя которую можно создавать пользователей, роли и ресурсы.
sysWork ;

//создание нового пользователя
NewUser(oldLog,log,pwd,id,idGr,managerSys)
s PeopleID=##class(DATA.HUMAN.People).%OpenId(id)
s FullName=PeopleID.Man.Surname_" "_PeopleID.Man.Name_" "_PeopleID.Man.Patronymic
d PeopleID.%Close()
s Gr=##class(DATA.SHARED.GroupUserSys).%OpenId(idGr)
s NameGr=Gr.Name
d Gr.%Close()
s namespace=$ZNSpace
zn "%SYS"
s prop="",sysUser=""
s sysUser=##Class(Security.Users).Get(oldLog,.prop)

if sysUser=1
{
s roles="%DB_%DEFAULT,%DB_CACHESYS,"_NameGr
if managerSys {s roles=roles_",%Manager"}
s prop("Roles")=roles
s prop("Password")=pwd
s prop("FullName")=FullName
s sysUser=##Class(Security.Users).Modify(oldLog,.prop)
}
else
{
s sysUser=##Class(Security.Users).%New()
s sysUser.Name=log
s sysUser.Password=pwd
s sysUser.FullName=FullName
do sysUser.Roles.Clear()
do sysUser.Roles.Insert("%DB_%DEFAULT")
do sysUser.Roles.Insert("%DB_CACHESYS")
if managerSys {do sysUser.Roles.Insert("%Manager")}
do sysUser.Roles.Insert(NameGr)
d sysUser.%Save()

}
zn namespace
&sql(GRANT * ON * TO *)
q

//удаление пользователя
DeleteUser(id)
;DO $SYSTEM.Security.Login("_SYSTEM","SYS")
s cls=##class(DATA.SYSTEM.USERS).%OpenId(id)
if cls'=""
{ s login=cls.Login
d cls.%Close()
zn "%SYS"
d ##Class(Security.Users).Delete(login)
}
q

//удаление роли
DeleteRoles(id)
zn "%SYS"
do ##Class(Security.Roles).Delete(id)
q

//создание роли
CreateRoles(Name,Opis,SpisRes)
zn "%SYS"
if (##Class(Security.Roles).Exists(Name))
{
s Properties("Resources")=""
s Properties("Resources")=SpisRes
do ##Class(Security.Roles).Modify(Name,.Properties)
}
else
{
s res=##Class(Security.Roles).%New()
d res.Create(Name,Opis,SpisRes,) ; создает роль с ресурсами(разделитель запятая)
d res.%Save()
}

q

//редактирование роли
EditRoles(oldid,id)
zn "%SYS"
do ##Class(Security.Roles).Copy(oldid,id,oldid)
do ##Class(Security.Roles).Delete(oldid)

q


//удаление ресурса
DeleteResources(id)
zn "%SYS"
do ##Class(Security.Resources).Delete(id)
q

//создание ресурса
CreateResources(Name,Opis)
zn "%SYS"
s res=##Class(Security.Resources).%New()
s res.Name=Name
s res.Description=Opis
d res.%Save()
q


CreateAllResources
s namespace=$ZNSpace
zn "%SYS"
Set rset = ##class(%ResultSet).%New("DATA.SHARED.ResSys:ByName")
Do rset.Execute()


//заполняем созданый список ресурсов

While (rset.Next()) {

s res=##Class(Security.Resources).%New()
s res.Name=rset.Data("Name")
s res.Description=rset.Data("Opisanie")
d res.%Save()

}
zn namespace
q


СreateResourcesFrom()
;дополнение списка ресурсов
s namespace=$ZNSpace
zn "%SYS"
s i=0
for {
set i=i+1
set option=$CASE(i,1:"Individual^Фізічна особа",
2:"Juridical^Юридична особа",
3:"Admin_Total^Адміністратор системи",
4:"Admin_DB^Адміністратор бази даних",
5:"User_SYS^Загальний користувач",
6:"Individual_Edit^Редагування Фізічної особи",
7:"Juridical_Edit^Редагування Юридичної особи",
8:"Total_Edit^Редагування",
9:"User_GO^Загальний користувач ОСАГО",
10:"Admin_GO^Адміністратор бази данних ОСАГО",
11:"%System_CallOut^%System_CallOut",
12:"%All^%All",
:"close")
q:option="close"


s NamRes=$p(option,"^"),NamOpis=$p(option,"^",2)

i NamRes'="" {
s res=##Class(Security.Resources).Exists(NamRes)
i 'res {

s sres=##Class(Security.Resources).%New()
s sres.Name=NamRes
s sres.Description=NamOpis
d sres.%Save()

}
zn namespace

Set rset = ##class(%ResultSet).%New("DATA.SHARED.ResSys:SerchName")
Do rset.Execute(NamRes)
i 'rset.Next() {

s rres=##Class(DATA.SHARED.ResSys).%New()
s rres.Name=NamRes
s rres.Opisanie=NamOpis
d rres.%Save()

}
zn "%SYS"

}
}

q 1

Пример вызова программы.
/// Формирование полного набора ресурсов
Method СreateResourcesFrom() [ ZenMethod ]
{

j СreateResourcesFrom^sysWork()
h 1
&js<zenPage.gotoPage('WEBFORM.frmAllResSys.cls');>
q
}

Создание роли.

Class WEBFORM.frmCardGroup Extends WEBFORM.Template.TemplateCard
{

/// Имя приложения, которому принадлежит эта страница.
Parameter APPLICATION = "WEBFORM.Application";

/// Отображаемое имя для нового приложения.
Parameter PAGENAME;

/// Домен, используемый для локализации.
Parameter DOMAIN;

Property objID As %ZEN.Datatype.integer(ZENURL = "ID") [ InitialExpression = 1 ];

/// Этот блок Style содержит определение CSS стиля страницы.
XData Style
{
<style type="text/css">
</style>
}

/// Этот XML блок описывает содержимое этой страницы.
XData mainPane [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<pane xmlns="http://www.intersystems.com/zen" title="">
<dataController id="source" modelClass="WEBFORM.DataModel.GroupUserSys" modelId="#(%url.ID)#"/>
<fieldSet label="Картка ролі користувача" labelStyle="font-size: 1.5em; text-align: center;">
<form id="idForm" align="center" valign="middle" controllerId="source">
<text label="Назва ролі:" id="Name"
name="Name" size="50"
required="true"
requiredMessage="не заповнено"
dataBinding="Name"
/>
</form>
</fieldSet>
<hgroup align="right">
<button align="right" caption="Зберегти" onclick="zenPage.saveItem();"/>
<spacer width="40"/>
<button align="right" caption="Вихід" onclick="zenPage.ExitForm();"/>
</hgroup>
<text label="ID:" id="objid" value="#(%url.ID)#" size="4" hidden="true"/>

</pane>
}

/// сохранение записи
Method saveItem() [ Language = javascript ]
{
var form = zenPage.getComponentById('idForm');
form.save();
var name = zenPage.getComponentById('Name').getProperty('value');
this.CreateRoles(name);
self.close();
}

/// создание роли
ClassMethod CreateRoles(id) [ ZenMethod ]
{
j CreateRoles^sysWork(id,id,"")
Quit
}

/// закрываем окно
Method ExitForm() [ ZenMethod ]
{
&js<self.close();>
}

}

создание списка ресурсов для роли.

Class WEBFORM.frmCardPermissionGroup Extends WEBFORM.Template.TamplateObject
{

/// Имя приложения, которому принадлежит эта страница.
Parameter APPLICATION = "WEBFORM.Application";

/// Отображаемое имя для нового приложения.
Parameter PAGENAME;

/// Домен, используемый для локализации.
Parameter DOMAIN;

Property objID As %ZEN.Datatype.integer(ZENURL = "ID") [ InitialExpression = 1 ];

/// Этот блок Style содержит определение CSS стиля страницы.
XData Style
{
<style type="text/css">
</style>
}

/// Этот XML блок описывает содержимое этой страницы.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="" dragAndDrop="true">
<hgroup align="center">
<vgroup valign="top">
<titleBox title="Доступні ресурси"/>
<spacer height="2"/>
<listBox id="DostMenu" listWidth="400px" listHeight="570px"
dragEnabled="true" dropEnabled="true"
onafterdrag="zenPage.afterDrag(zenThis,dragData);">
</listBox>
</vgroup>
<spacer width="10"/>
<vgroup valign="top">
<titleBox title="Вибрані ресурси"/>
<spacer height="2"/>
<listBox id="SelectMenu" listWidth="400px" listHeight="570px"
dragEnabled="true" dropEnabled="true"
onafterdrag="zenPage.afterDrag(zenThis,dragData);">
</listBox>
</vgroup>
</hgroup>
<hgroup align="center">
<button align="center" caption="Зберегти" onclick="zenPage.saveItem();"/>
<spacer width="40"/>
<button align="center" caption="Вихід" onclick="zenPage.ExitForm();"/>
</hgroup>
<text label="ID:" id="objid" value="#(%url.ID)#" size="4" hidden="true"/>
</page>
}

/// сохранение записи
Method saveItem() [ Language = javascript ]
{
var menu= zenPage.getComponentById('SelectMenu');
var itemCount=menu.getOptionCount();
var getStringItem = new Array();
for (i=0;i<itemCount;i++)
{
getStringItem[i]=menu.getOptionValue(i)+'^'+menu.getOptionText(i);
}
this.savePermissionGroup(getStringItem);
}

Method savePermissionGroup(listItem As %ListOfDataTypes) [ ZenMethod ]
{
s cl=##class(DATA.SHARED.GroupUserSys).%OpenId(..objID)
s name=cl.Name
d cl.SelectMenu.Clear()
s res=""
if (listItem'="")
{
for i=1:1:listItem.Count()
{
s clItem=##class(DATA.SHARED.ParamSaveGroup).%New()
s clItem.value=$p(listItem.GetAt(i),"^",1)
s clItem.text=$p(listItem.GetAt(i),"^",2)
d cl.SelectMenu.Insert(clItem)
s res=res_clItem.value_":U,"
}

}

s res=$e(res,1,$l(res)-1)
d cl.%Save()

j CreateRoles^sysWork(name,name,res)

&js<alert('Ресурси записані!');>
}

Method loadPermissionGroup() [ ZenMethod ]
{

//открываем класс где определены доступные пункты меню для группы
s cl=##class(DATA.SHARED.GroupUserSys).%OpenId(..objID)
//создаем стартовый список пунктов меню
s clDostMenu=##class(%ListOfDataTypes).%New()

Set rset = ##class(%ResultSet).%New("DATA.SHARED.ResSys:ByName")
Do rset.Execute()

//заполняем созданый список ресурсов
While (rset.Next())
{
set option=rset.Data("Name")_"^"_rset.Data("Opisanie")
d clDostMenu.Insert(option)
}

//очищаем списоки
&js<var compSelect = zenPage.getComponentById('SelectMenu');
var compDost = zenPage.getComponentById('DostMenu');
if (compSelect){compSelect.resetOptions()};
if (compDost){compDost.resetOptions()};>

Set tComp = %page.%GetComponentById("SelectMenu")
If $IsObject(tComp)
{
for i=1:1:cl.SelectMenu.Count()
{
s clItem=##class(DATA.SHARED.ParamSaveGroup).%New()
s clItem=cl.SelectMenu.GetAt(i)
// заполняем список выбранных пунктов меню
&js<
var comp = zenPage.getComponentById('SelectMenu');
if (comp)
{
comp.appendOption('#(clItem.value)#','#(clItem.text)#');
}
>
//убираем из списка доступных пунктов меню выбранные
for j=1:1:clDostMenu.Count()
{
s iDelete=clDostMenu.Find(clItem.value_"^"_clItem.text)
d clDostMenu.RemoveAt(iDelete)
}
}

}
//заполняем список доступных пунктов меню
for j=1:1:clDostMenu.Count()
{
s clDostItem=clDostMenu.GetAt(j)
s value=$p(clDostItem,"^",1)
s text=$p(clDostItem,"^",2)
&js<
var comp = zenPage.getComponentById('DostMenu');
if (comp)
{
comp.appendOption('#(value)#','#(text)#');
}
>
}
}

/// закрываем окно
Method ExitForm() [ ZenMethod ]
{
&js<self.close();>
}

Method afterDrag(listBox, dragData) [ Language = javascript ]
{
if (dragData.targetComponent.isOfType('listBox')) {
// ignore drag onto ourselves
if (dragData.targetComponent != listBox) {
if (dragData.sourceItem >= 0) {
listBox.removeOption(dragData.sourceItem);
}
}
}
}

/// This client event, if present, is fired when the page is loaded.
Method onloadHandler() [ Language = javascript ]
{
this.loadPermissionGroup();
}

}


Создание нового пользователя

Class WEBFORM.frmCardRegUser Extends WEBFORM.Template.TemplateCard
{

/// Имя приложения, которому принадлежит эта страница.
Parameter APPLICATION = "WEBFORM.Application";

/// Отображаемое имя для нового приложения.
Parameter PAGENAME;

/// Домен, используемый для локализации.
Parameter DOMAIN;

Property objID As %ZEN.Datatype.integer(ZENURL = "ID") [ InitialExpression = 1 ];

Property paramSave As %Integer [ InitialExpression = 0 ];

/// Этот блок Style содержит определение CSS стиля страницы.
XData Style
{
<style type="text/css">
</style>
}

/// Этот XML блок описывает содержимое этой страницы.
XData mainPane [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<pane xmlns="http://www.intersystems.com/zen" title="">
<dataController id="sourceUsers"
modelClass="WEBFORM.DataModel.Users" modelId="#(%url.ID)#"/>
<fieldSet label="Реєстраційна картка користувача" labelStyle="font-size: 1.5em; text-align: center;">
<vgroup id="groupRight" width="100%" valign="top">
<spacer height="10"/>
<html id="error" align="center" enclosingStyle="color:red;"></html>
<form id="formBasic" align="center" width="500px">
<group align="center">
<spacer height="40"/>
<dataCombo label="Фізична особа" id="idSurname" name="idSurname" size="40"
dropdownWidth="400"
editable="true"
searchKeyLen="20"
comboType="button"
buttonCaption="Пошук"
buttonTitle="Пошук за прізвищем"
sql="SELECT %ID,Man_Surname,Man_Surname _' '_ Man_Name _' '_ Man_Patronymic,
Man_BirthDay FROM DATA_HUMAN.People WHERE Man_Surname %STARTSWITH ? ORDER BY Man_Surname"
sqlLookup="SELECT Man_Surname,Man_Surname _' '_ Man_Name _' '_ Man_Patronymic,
Man_BirthDay FROM DATA_HUMAN.People WHERE %ID=? ORDER BY Man_Surname"
unrestricted="true"
columnHeaders="Прізвище ім'я та по батькові, День народження"
displayColumns="3,4"
choiceColumn="2"
valueColumn="1"
maxRows="100"
required="false"
onchange="zenPage.changeEnterprise();"
/>

<spacer height="10"/>

<dataCombo id="idGruppa"
size="30"
comboType="button"
buttonCaption="Група ресурсів"
label="Групи системних ресурсів"
name="idGruppa"
editable="true"
choiceColumn="2"
valueColumn="1"
displayColumns="2"
dropdownWidth="25.0em"
dropdownHeight="auto"
searchKeyLen="5"
sql="SELECT %ID,Name FROM DATA_SHARED.GroupUserSys ORDER BY Name"
sqlLookup="SELECT Name FROM DATA_SHARED.GroupUserSys WHERE %ID = ? ORDER BY Name"
columnHeaders="Групи системних ресурсів"
cached="true"
required="false"
unrestricted="true"
/>
<text label="Логін:" id="Login" name="Login" size="40"
required="true"/>

<password label="Пароль:" id="Password1" name="Password1" size="40"
required="true"/>
<password label="ще раз:" id="Password2" name="Password2" size="40"
required= "true"/>

<checkbox id="manager"
label="Дозволено добавляти нових користувачів, та редагувати права доступу існуючих"
/>
<checkbox id="ShowAllRecord"
label="Дозволено перегляд усіх записів"
/>
</group>
</form>
</vgroup>
</fieldSet>
<spacer height="40"/>
<hgroup align="right">
<button align="right" caption="Реєстрація" onclick="zenPage.Registration();"/>
<spacer width="40"/>
<button align="right" caption="Вихід" onclick="zenPage.ExitForm();"/>
</hgroup>

</pane>
}

Method changeEnterprise() [ Language = javascript ]
{
var checkUser=zenPage.getComponentById('idSurname');
var id=checkUser.getProperty('value');
var countWorkPlace=this.systemIStartSetup(id);
if (countWorkPlace==0) alert('Увага! Для даної фізичної особи необхідно додати місце роботи!');
}

Method systemIStartSetup(id) As %Integer [ ZenMethod ]
{
s recordCount=0
set rs=##class(%ResultSet).%New()
set rs.ClassName="DATA.PERSONNELDEPARTMEN.Workplace"
set rs.QueryName="GetWorkplaceByPeopleID"
set sc=rs.Execute(id)
If $$$ISOK(sc)
{
while rs.%Next()
{
s ..paramSave=1
s recordCount=recordCount+1
}
}
q recordCount
}

Method ExitForm() [ ZenMethod ]
{
///закрываем окно
&js<self.close();>
}

/// Регистрация
Method Registration() [ ZenMethod ]
{
if ..paramSave=0
{
&js<alert('Увага! Для даної фізичної особи необхідно додати місце роботи!');>
q
}

if ($ROLES["%All")||($ROLES["%Manager")
{

if (..objID="")
{
set user=##class(DATA.SYSTEM.USERS).%New()

}
else
{
set user=##class(DATA.SYSTEM.USERS).%OpenId(..objID)

}

set p1 = ..%GetValueById("Password1")
set p2 = ..%GetValueById("Password2")
if p1'=p2 {
&js<zenPage.getComponentById('error').setContent("Ви ввели два різних пароля!");>
quit
}

#; проверка на наличие пустых полей
if '(..CheckValue()){
&js<zenPage.getComponentById('error').setContent("Заповніть всі поля!");>
quit
}



set oldLogin=user.Login
set login = ..%GetValueById("Login")
;s ^a(1)=oldLogin_","_login_","_(oldLogin '= login)

#; если введенный Login существует – ошибка

if (..objID="")
{
set pId = ##class(DATA.SYSTEM.USERS).FindPersonal(login)
if (pId '= "") {
&js<zenPage.getComponentById('error').setContent("Користувач с таким логіном уже існує! Введіть інший.");>
quit
}

}

if oldLogin'="",oldLogin'=login
{
&js<zenPage.getComponentById('error').setContent("Заборонено редагувати логін в цьому режимі! Потрібно вилучити користувача.");>
Do %page.%SetValueById("Login",user.Login)
quit
}

#; новый класс DATA.SYSTEM.USERS
//Set text=$ZCONVERT(p1,"O","UTF8")
//Set pasw=$SYSTEM.Encryption.Base64Encode(text)
//set user.Password=pasw


Set text=$ZCONVERT(p1,"O","UTF8")
Set pasw=$SYSTEM.Encryption.Base64Encode(text)
set user.Password=pasw
set user.Login = login
//set user.Password = p1
d user.PeopleSetObjectId(..%GetValueById("idSurname"))
d user.GrNameSetObjectId(..%GetValueById("idGruppa"))
//пользователю добавляется роль %Manager для возможности управления пользователями в системе
s user.ManagerSys=..%GetValueById("manager")
s user.ShowAllRecord=..%GetValueById("ShowAllRecord")
d user.%Save()
&js<var formB = zenPage.getComponentById('formBasic');
var error = zenPage.getComponentById('error');
error.setProperty('enclosingStyle',"color:green;")
error.setContent("Реєстрація завершена успішно!");
>
//добавляем данного пользователя в пользователи Cache'
j NewUser^sysWork(oldLogin,login,p1,..%GetValueById("idSurname"),..%GetValueById("idGruppa"),..%GetValueById("manager"))
}
else
{
&js<alert("У вас недостатньо превілегій для даної операції. Зверніться до 'Адміністратора системи'");>
}
quit
}

/// Проверка всех полей ввода
Method CheckValue() As %ZEN.Datatype.boolean [ ZenMethod ]
{
set p1 = ..%GetValueById("Password1")
set login = ..%GetValueById("Login")
set surname = ..%GetValueById("idSurname")
set priorit = ..%GetValueById("idGruppa")
if (login="")||(surname="")||(p1="")||(priorit="")
{
quit 0
}
quit 1
}

ClassMethod LoadUser(pForm As %ZEN.Component.form, pID As %ZEN.Datatype.string) [ ZenMethod ]
{
set user=##class(DATA.SYSTEM.USERS).%OpenId(pID)
if user'="" {
Do %page.%SetValueById("Login",user.Login)

set ent = user.People
if ent'="" {Do %page.%SetValueById("idSurname",ent.%Id())}

set ent = user.GrName
if ent'="" {Do %page.%SetValueById("idGruppa",ent.%Id())}

Do %page.%SetValueById("manager",user.ManagerSys)
Do %page.%SetValueById("ShowAllRecord",user.ShowAllRecord)
}
}


Method %OnAfterCreatePage() As %Status
{

If (..objID '= "") {
#; load contents of given object into form
Set tForm = ..%GetComponentById("formBasic")
Do ..LoadUser(tForm,..objID)
}

Quit $$$OK
}

}
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469308
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руководство по администрированию Caché версий 5.2, 2008, 2009, 2010 (стр. 137)
Уголок разработчика . Есть описание того, как можно интегрировать эту страницу в стандартную документацию Caché.
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469566
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем ситуация такая:
при формировании страницы на стороне сервера происходит сбор всех компонентов и т.д. метод %DrawHTML по моему, в каждом компоненете при его формировании есть метод проверки разрешения его отображения на странице (это и есть resourse).
Если пользователь имеет в своем списке ресурсов такое название ресурса с признаком использования, то компонет отображается, иначе нет.
Соответственно: если на странице происходит обращение к компоненту, не важно из COS или JS, рекомендуется во избежании выскакивания ошибки, проверять наличие компонента.
Код: plaintext
1.
2.
COS:
 s t=%page.%GetComponentById('table')
 q:'$IsObject(t) 
Код: plaintext
1.
2.
JS:
 var btn=this.getComponentById('btnSave');
 if (btn) btn.setDisabled(true);
Ресурсы могут разделятся на разные типы действия (читать, писать, использовать)
Ресурсы назначаются как пользователям так и ролям, роли соответственно потом назначаются пользователям.
Все действия по назначению и т.д. можно делать в портале, а можно использовать свои штучки дрючки.
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469596
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit Руководство по администрированию Caché версий 5.2, 2008, 2009, 2010
За это отдельное спасибо!

Начинаю читать.
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469644
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuraM,

подскажите, а как вы SQL-таблицы раздаете пользователям?, точнее ролям?
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469705
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то сразу много информации... А если т.с. "по шагам"?

Вот есть ЗЕН-страничка...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
/// tmp
Class uch.ZEN.tmp Extends %ZEN.Component.page
{

/// Class name of application this page belongs to.
Parameter APPLICATION = "uch.ZEN.App";

/// Displayed name of this page.
Parameter PAGENAME = "tmp";

/// Domain used for localization.
Parameter DOMAIN = "";

/// This Style block contains page-specific CSS style definitions.
XData Style
{
<style type="text/css">
</style>
}
/// This XML block defines the contents of this page.
XData Contents [XMLNamespace="http://www.intersystems.com/zen"]
{
<page xmlns="http://www.intersystems.com/zen" title="">
	<button id="btTest" caption="Test" />
</page>
}
}

Что теперь нужно сделать для того, чтобы кнопка показывалась "не всем"? Т.е. что делать:
1. ?
2. ?
3. ?
...?
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469891
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

1. Сделать кнопку ресурсом (указать resource в теге кнопки)
2. Описать этот ресурс в системе (не оставив общедоступного права: Общедоступное право: галку "Чтение " убрать)
3. Создать нужную роль и добавить ресурс в роль
4. Добавить пользователю роль.

Разлогиниться и залогиниться - кнопки не будет.
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469893
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри - кнопка как-раз будет ;)
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469991
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov1. Сделать кнопку ресурсом (указать resource в теге кнопки)
Т.е. так?

Код: plaintext
<button id="btTest" caption="Test" resource='test' />


kolesov2. Описать этот ресурс в системе (не оставив общедоступного права: Общедоступное право: галку "Чтение " убрать)
Вот он


kolesov3. Создать нужную роль и добавить ресурс в роль
Вот она


kolesov4. Добавить пользователю роль.
Вот он


kolesovРазлогиниться и залогиниться - кнопки не будет.
А это как? При старте странички у меня логин, пароль не запрашиваются...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36469995
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovсорри - кнопка как-раз будет ;)
А на чем тогда тренироваться? Как тогда кнопками управлять?
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470031
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что интересно... У ресурса убраны все галки... А если его дать роли - все галки включены. Если там их все убрать - кнопка "Сохранить" не активна...
Это так нужно?
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470093
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для кнопки достаточно только "U" - использовать
теперь зайди в
[Домашняя страница] > [Управление безопасностью] > [CSP приложения]
найди свое приложение, редактирование, убрать галку с "Не аутентифицированный"
поставить галку "пароль"
закрыть браузер и открыть ту страницу из студии
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470158
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007для кнопки достаточно только "U" - использовать
Написал везде U...

Ymka2007теперь зайди в
[Домашняя страница] > [Управление безопасностью] > [CSP приложения]
найди свое приложение, редактирование, убрать галку с "Не аутентифицированный"
поставить галку "пароль"
Вот так написал... Даже ресурс указал! Надо или нет?


Ymka2007закрыть браузер и открыть ту страницу из студии
Что-то не спрашивает... У меня ведь ЗЕН-страница или это не важно? УРЛ во такой использую

http://cache/uchet/uch.ZEN.tmp.cls
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470190
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через некоторое время таки пароль спросила... Но потом выдала ошибку

Код: plaintext
ОШИБКА # 5924 : Произошла ошибка, но указанная в настройках CSP-приложения пользовательская страница обработки ошибок не может быть загружена. Пожалуйста, обратитесь к администратору

Причем в юникоде. И никакой пользовательской страницы у меня не объявлено...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470207
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как теперь посмотреть чего не так?
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470244
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отменяю "Пароль", ставлю "Не аутентифицированный" моя кнопочка рисуется без проблем...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470248
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что тут может быть не так?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
/// tmp
Class uch.ZEN.tmp Extends %ZEN.Component.page
{

/// Class name of application this page belongs to.
Parameter APPLICATION = "uch.ZEN.App";

/// Displayed name of this page.
Parameter PAGENAME = "tmp";

/// Domain used for localization.
Parameter DOMAIN = "";

/// This Style block contains page-specific CSS style definitions.
XData Style
{
<style type="text/css">
</style>
}
/// This XML block defines the contents of this page.
XData Contents [XMLNamespace="http://www.intersystems.com/zen"]
{
<page xmlns="http://www.intersystems.com/zen" title="">
	<button id="btTest" caption="Test" resource="test" />
</page>
}
}

----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470323
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все так
если у твоего пользователя нет ресурса test, то у него на странице и не будет этой кнопки
поставь ресурс на страницу сразу все понятно будет
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470328
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

только этой роли недостаточно... нужно еще добавить роли типа "пользователь системы", "смотрельщик ЦСП", "читатель БД" и проч - тут простор для фантазии

Можно за счет нескольких ролей, можно просто все нужные ресурсы запихнуть в ту роль...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470355
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

В т.ч. нужны ресурсы типа %DB_%DEFAULT (или %DB_ВашаБД)

Кроме того, нужно проверить, что на гейтвее настроен и работает доступ к ЦСП (нажмите "проверить соединение с сервером" - м.б. вы в процессе убили неавторизованный доступ к ЦСП-сервису)
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470362
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovтолько этой роли недостаточно... нужно еще добавить роли типа "пользователь системы", "смотрельщик ЦСП", "читатель БД" и проч - тут простор для фантазии
У меня как раз с фантазией-то и туго. Мне бы рассказали точно чего еще добавить и куда дабы заработало...

kolesovМожно за счет нескольких ролей, можно просто все нужные ресурсы запихнуть в ту роль...
Я же пока вообще не вкурсе чего и как... Пока все на ощупь... Упёрся вот в ошибку...

Чего еще и куда добавлять не знаю... Может возьмёт кто не умелго по потронаж?
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470371
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

добавление ресурса %DB_%DEFAULT в роль не помогло?
добавьте ВСЕ СУЩЕСТВУЮЩИЕ РЕСУРСЫ в роль - посмотрите, что выйдет ;)
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470372
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovВ т.ч. нужны ресурсы типа %DB_%DEFAULT (или %DB_ВашаБД)
Добавил в роль ресурс %DB_%DEFAULT - получил вот такую ошибку...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
На странице возникла ошибка исполнения

Ошибка: <PROTECT>%Log+ 1 ^%ZEN.Utils. 1  ^%ISC.ZENLOG,c:\intersystems\cache\mgr\
Ошибка:  5002 
CSP страница: /uchet/uch.ZEN.tmp.cls
Область: UCHET
Класс: uch.ZEN.tmp
Программа: %ZEN.Utils. 1 
Расположение: %Log+ 1 

%DB_ВашаБД еще нет... Не создавал никогда...

kolesovКроме того, нужно проверить, что на гейтвее настроен и работает доступ к ЦСП (нажмите "проверить соединение с сервером" - м.б. вы в процессе убили неавторизованный доступ к ЦСП-сервису)
А это как и где?
Такое ренее вообще не настраивал и не проверял...
...
Рейтинг: 0 / 0
Научите как пользоваться resource...
    #36470374
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovдобавьте ВСЕ СУЩЕСТВУЮЩИЕ РЕСУРСЫ в роль - посмотрите, что выйдет ;)
Ща спробану!
...
Рейтинг: 0 / 0
25 сообщений из 68, страница 1 из 3
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Научите как пользоваться resource...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]